// 基类成员函数和派生类成员函数不构成重载
// 基类成员和派生类成员的名字一样时会造成遮蔽，这句话对于成员变量很好理解，对于成员函数要引起注意，不管函数的参数如何，
// 只要名字一样就会造成遮蔽。换句话说，基类成员函数和派生类成员函数不会构成重载，如果派生类有同名函数，那么就会遮蔽基类中的所有同名函数，不管它们的参数是否一样。

#include<iostream>
using namespace std;

//基类Base
class Base{
    public:
        void func();
        void func(int);
};

void Base::func() {cout<<"Base::func()"<<endl;}
void Base::func(int a) {cout<<"Base::func(int)"<<endl;}

// 派生类
class Derived: public Base{
public:
    void func(char *);
    void func(bool);
};

void Derived::func(char *str){ cout<<"Derived::func(char *)"<<endl; }
void Derived::func(bool is){ cout<<"Derived::func(bool)"<<endl; }

int main(){
    Derived d;
    d.func("c.biancheng.net");
    d.func(true);
    // d.func();  //compile error
    // d.func(10);  //compile error
    d.Base::func();
    d.Base::func(100);
    return 0;
}

// 本例中，Base 类的func()、func(int)和 Derived 类的func(char *)、func(bool)四个成员函数的名字相同，参数列表不同，它们看似构成了重载，
// 能够通过对象 d 访问所有的函数，实则不然，
// Derive 类的 func 遮蔽了 Base 类的 func，导致第 26、27 行代码没有匹配的函数，所以调用失败。